/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ChatNI;

import common.Message;
import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import java.net.*;

/**
 *Classe pour la communication via UDP
 * @author Marion et Nicolas
 */
public class UDPCom  {
    
    private DatagramSocket datagrameSocket;
    private Thread thread;
    
     /**
     * Le constructeur lance le thread pour la communication UDP
     * @param portSrc
     * @param portDest
     * @param adrDest 
     */
    public UDPCom (int portSrc, int portDest, InetAddress adrDest){
        try {
                datagrameSocket = new DatagramSocket(portSrc);
                ChatNI.adrDestination=adrDest;
                ChatNI.portDestination=portDest;
                thread = new Thread();
                thread.start();
        }
        
        catch (Exception e){
            System.out.println("Erreur dans le constructeur UDPCom");
        }
    }
    

    private byte[] messageToBytes (Message message) {
      try {
          ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
          ObjectOutputStream oos = new ObjectOutputStream(byteArray);   // oos contenant une liste d'octets
          oos.writeObject(message);                                     // On écrit notre message à l'intérieur
          oos.flush();
          return byteArray.toByteArray();                       // Puis renvoyer notre liste d'octets (contenant le mess)
      } catch (Exception e){                                            
          System.out.println("Erreur de conversion du Message en Bytes");
          return null;
      }
    }
    /**
      * Envoi d'un message à un utilisateur 
      * @param message 
      */
     
    protected void sendMessage (Message message){
            try{
                byte[] tablOctets = messageToBytes(message);
                int taille = tablOctets.length;                
                
                // Création d'un packet contenant une addresse car on envoie !!
                DatagramPacket packet = new DatagramPacket(tablOctets,taille,ChatNI.adrDestination,ChatNI.portDestination);
                datagrameSocket.send(packet);
            } catch (Exception e){
                System.out.println("Erreur d'envoi de message via UDP");
            }
    }
    
    /**
     * Arrêt d'une communicaton via udp
     */
    protected void stop(){
            thread.interrupt();
            datagrameSocket.close();
    }

}